home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / netBoot.new / sys / keypress.c < prev    next >
C/C++ Source or Header  |  1990-12-19  |  2KB  |  75 lines

  1.  
  2. /*
  3.  * @(#)keypress.c 1.1 86/09/27
  4.  * Copyright (c) 1986 by Sun Microsystems, Inc.
  5.  */
  6.  
  7. /*
  8.  * keypress.c
  9.  *
  10.  * This routine is called each time a keypress is received.  It should
  11.  * be as fast and safe as possible, since it runs at high interrupt levels.
  12.  * It should just stash the character somewhere and check for aborts.
  13.  * All other processing is done in "getkey".
  14.  */
  15.  
  16. #include "../sun3/sunmon.h"
  17. #include "../h/globram.h"
  18. #include "../h/keyboard.h"
  19. #include "../h/asyncbuf.h"
  20.  
  21. #define keybuf        gp->g_keybuf
  22. #define keystate    gp->g_keystate
  23. #define keybid        gp->g_keybid
  24.  
  25.  
  26. /*
  27.  * A keypress was received (from a parallel or serial keyboard).
  28.  * Process it, and return zero for normalcy or nonzero to abort.
  29.  */
  30. int
  31. keypress(key)
  32.     register unsigned char key;
  33. {
  34.     switch (keystate) {
  35.  
  36.     normalstate:
  37.         keystate = NORMAL;
  38.  
  39.     case NORMAL:
  40.         if (key == ABORTKEY1) {
  41.             keystate = ABORT1; 
  42.             break;
  43.         }
  44.         bput (keybuf, key);
  45.         break;
  46.  
  47.     case ABORT1:
  48.         if (key == ABORTKEY2) {
  49.             keystate = NORMAL;
  50.             bputclr(keybuf);  /* Clear typeahead */
  51.             abortfix(); /* Let our other half know that
  52.                      these keys really did go down */
  53.             gp->g_insource = INKEYB;  /* Take keyb inp */
  54.             gp->g_outsink = OUTSCREEN;
  55.             return 1;    /* Break out to the monitor */
  56.         } else {
  57.             bput (keybuf, ABORTKEY1);
  58.             goto normalstate;
  59.         }
  60.  
  61.     case STARTUP:
  62.         if (key == RESETKEY)
  63.             keystate = STARTUP2;
  64.         break;
  65.  
  66.     case STARTUP2:
  67.         keybid = key;
  68.         bput (keybuf, RESETKEY);
  69.         keystate = NORMAL;
  70.         break;
  71.     }
  72.     return 0;        /* After normalcy, return 0. */
  73. }
  74.  
  75.